package com.service.other;

import java.io.OutputStream;
import java.io.PrintStream;

import javax.swing.JCheckBox;
import javax.swing.JTextArea;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;

/**
 * 把控制台的消息重定向到画面的textArea
 * @author wt
 *
 */
public class GUIPrintStream extends PrintStream {

	private JTextArea textArea;  
	private JCheckBox chkScroll;  
	
	public GUIPrintStream(OutputStream out,JTextArea textArea,JCheckBox chkScroll) {
		super(out);
		this.textArea = textArea;  
		this.chkScroll = chkScroll;  
	}

	@Override
	public void write(byte[] buf, int off, int len) {
		// 一行字符串中指定的部分
		final String message = new String(buf, off, len);  
		// 追加内容到画面控件
		textArea.append(message);
		// 移动光标到最后，自动滚动
		if(!chkScroll.isSelected()){
			textArea.setCaretPosition(textArea.getText().length());
		}
		
		//内容数量控制，防止内存占用太多。
		try {
			Document doc = textArea.getDocument();
			if (doc.getLength() > 140*(8000+2000)){
				doc.remove(0, doc.getLength()-140*8000);
			}			
		} catch (BadLocationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}
